#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "facecat/stdafx.h"
#include <QMainWindow>
#include <QPainter>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QKeyEvent>
#include <QLineEdit>
#include <QTimer>
#include "Win32/QtHost.h"
#include "Win32/QtPaint.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

/**
 * 主窗体
 */
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    /**
     * 构造函数
     */
    MainWindow(QWidget *parent = nullptr);
    /**
     * 析构函数
     */
    ~MainWindow();
private:
    Ui::MainWindow *ui;
public:
    /**
     * 设备对接
     */
    QtHost *m_host;
    /**
     * 公共方法库
     */
    FCNative *m_native;
    /**
     * 绘图方法
     */
    QtPaint *m_paint;
    /**
     * Qt输入框
     */
    QLineEdit *m_textBox;
    /**
     * 虚拟输入框
     */
    FCView *m_editingTextBox;
    /**
     * 缩放比例
     */
    double m_scaleFactor;
    /**
     * 鼠标按钮
     */
    int m_buttons;
    /**
     * 点击次数
     */
    int m_clicks;
    /**
     * 绘图方法
     */
    void paintEvent(QPaintEvent *event) override;
    /**
     * 鼠标按下
     */
    void mousePressEvent(QMouseEvent *event) override;
    /**
     * 鼠标松开
     */
    void mouseReleaseEvent(QMouseEvent *event) override;
    /**
     * 鼠标移动
     */
    void mouseMoveEvent(QMouseEvent *event) override;
    /**
     * 鼠标双击
     */
    void mouseDoubleClickEvent(QMouseEvent *event) override;
    /**
     * 键盘按下
     */
    void keyPressEvent(QKeyEvent *event) override;
    /**
     * 键盘抬起
     */
    void keyReleaseEvent(QKeyEvent *event) override;
    /**
     * 鼠标滚轮
     */
    void wheelEvent(QWheelEvent *event) override;
    /**
     * 加载视图
     */
    void onLoad();
    /**
     * 重置大小
     */
    void resetScaleSize(FCSize clientSize);
    /**
     * 显示输入框
     */
    void showTextBox(FCView *view, FCView *lastView);
    /**
     * 隐藏输入框
     */
    void hideTextBox(FCView *view);
};

#endif // MAINWINDOW_H
